// questionSource.js - 题目来源服务模块
import api from './api'

export default {
  /**
   * 创建题目来源
   * @param {Object} data - 题目来源数据
   * @returns {Promise} 包含响应数据的Promise
   */
  async createQuestionSource(data) {
    try {
      const response = await api.createQuestionSource(data)
      return response.data
    } catch (error) {
      throw new Error(`创建题目来源失败: ${error.response?.data?.message || error.message}`)
    }
  },

  /**
   * 获取单个题目来源
   * @param {String} id - 题目来源ID
   * @returns {Promise} 包含题目来源数据的Promise
   */
  async getQuestionSource(id) {
    try {
      const response = await api.getQuestionSource(id)
      return response.data
    } catch (error) {
      throw new Error(`获取题目来源失败: ${error.response?.data?.message || error.message}`)
    }
  },

  /**
   * 更新题目来源
   * @param {String} id - 题目来源ID
   * @param {Object} data - 更新数据
   * @returns {Promise} 包含响应数据的Promise
   */
  async updateQuestionSource(id, data) {
    try {
      const response = await api.updateQuestionSource(id, data)
      return response.data
    } catch (error) {
      throw new Error(`更新题目来源失败: ${error.response?.data?.message || error.message}`)
    }
  },

  /**
   * 删除题目来源
   * @param {String} id - 题目来源ID
   * @returns {Promise} 包含响应数据的Promise
   */
  async deleteQuestionSource(id) {
    try {
      const response = await api.deleteQuestionSource(id)
      return response.data
    } catch (error) {
      throw new Error(`删除题目来源失败: ${error.response?.data?.message || error.message}`)
    }
  },

  /**
   * 获取级联选择器选项
   * @returns {Promise} 包含级联选项数据的Promise
   */
  async getCascaderOptions() {
    try {
      const response = await api.getCascaderOptions()
      return response.data
    } catch (error) {
      throw new Error(`获取级联选项失败: ${error.response?.data?.message || error.message}`)
    }
  },

  /**
   * 获取所有题目来源类型
   * @returns {Promise} 包含来源类型列表的Promise
   */
  async getAllSourceTypes() {
    try {
      const response = await api.getAllSourceTypes()
      return response.data
    } catch (error) {
      throw new Error(`获取来源类型失败: ${error.response?.data?.message || error.message}`)
    }
  },

  /**
   * 批量重命名分类
   * @param {String} oldSourceType - 原来源类型
   * @param {String} newSourceType - 新来源类型
   * @returns {Promise} 包含响应数据的Promise
   */
  async batchRenameSourceType(oldSourceType, newSourceType) {
    try {
      const response = await api.batchRenameSourceType(oldSourceType, newSourceType)
      return response.data
    } catch (error) {
      throw new Error(`批量重命名失败: ${error.response?.data?.message || error.message}`)
    }
  },

  /**
   * 批量删除分类
   * @param {String} sourceType - 要删除的来源类型
   * @returns {Promise} 包含响应数据的Promise
   */
  async batchDeleteSourceType(sourceType) {
    try {
      const response = await api.batchDeleteSourceType(sourceType)
      return response.data
    } catch (error) {
      throw new Error(`批量删除失败: ${error.response?.data?.message || error.message}`)
    }
  },

  /**
   * 获取来源类型的内容列表
   * @param {String} sourceType - 来源类型
   * @returns {Promise} 包含内容列表的Promise
   */
  async getSourceContents(sourceType) {
    try {
      const response = await api.getSourceContents(sourceType)
      return response.data
    } catch (error) {
      throw new Error(`获取内容列表失败: ${error.response?.data?.message || error.message}`)
    }
  },

  /**
   * 获取分类结构的题目来源数据
   * @returns {Promise} 包含分类结构数据的Promise
   */
  async getMapSource() {
    try {
      const response = await api.getMapSource()
      return response.data
    } catch (error) {
      throw new Error(`获取分类结构数据失败: ${error.response?.data?.message || error.message}`)
    }
  },

  /**
   * 批量获取所有来源类型的内容
   * @returns {Promise} 包含所有来源类型内容的Promise
   */
  async getAllSourceContents() {
    try {
      const types = await this.getAllSourceTypes();
      const contents = await Promise.all(
        types.data.map(type => this.getSourceContents(type))
      );
      return contents.data.map(res => res.data);
    } catch (error) {
      throw new Error(`批量获取来源内容失败: ${error.message}`);
    }
  }
}
